﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HerGoS.Viaticos.Entities;
using System.Data;
using HerGoS.DAO;
using HerGoS.Interfaces;
using HerGoS.Administration.Engine;
using HerGoS.Viaticos.Exceptions;
using HerGoS.Administration.Entities;

namespace HerGoS.Viaticos.Engine
{
  public  class GestorTarifaKmRecorridos
    {

      public static List<TarifaKmRecorridos> Consultar()
      {
          List<TarifaKmRecorridos> lista = new List<TarifaKmRecorridos>();
          try
          {
              IRepository repo = RepositoryFactory.Create(Config.RepositoryViaticosName);
              repo.Nombre = "[TARIFASKMRECORRIDOS_SP]";
              repo.AddParameter("@ACCION", "CONSULTA");
              repo.AddParameter("@ID", null);
              DataTable dt = repo.ExecuteDataTable();
              lista = dt.ToGenericList<TarifaKmRecorridos>(TarifaKmRecorridosConverter);
              return lista;
          }
          catch (Exception ex)
          {
              throw new TarifakmRecorridoGetException(ex);
          }
      }

      public static void Guardar(TarifaKmRecorridos tarifaKmRecorridos)
      {
          try
          {
              IRepository repo = RepositoryFactory.CreateTransactional(Config.RepositoryViaticosName);
              repo.Nombre = "TARIFASKMRECORRIDOS_PROC";
              repo.AddParameter("@ACCION ", tarifaKmRecorridos.Persistencia);
              repo.AddParameter("@ID", tarifaKmRecorridos.OID);
              repo.AddParameter("@MONTOKM", tarifaKmRecorridos.Montokm);
              repo.AddParameter("@IDUSUARIO", HGSContext.Usuario.OID);
              tarifaKmRecorridos.OID = repo.ExecuteReturnValue().ToInteger();
              repo.Commit();

              GestorBitacora.Guardar(tarifaKmRecorridos);
          }
          catch (Exception ex)
          {
              throw new TarifakmRecorridoSaveException(ex);
          }
      }




      #region Converter
      public static TarifaKmRecorridos TarifaKmRecorridosConverter(DataRow row)
      {
          return new TarifaKmRecorridos
          {
              OID = row["tarID"].ToInteger(),
              Persistencia = EstadoPersistencia.UPDATE,
              Montokm = row["tarMonto"].ToDecimal(),
              UsuarioModificacion = GestorUsuario.Obtener(row["USUARIO_UPDATE"].ToInteger()),
              FechaModificacion = row["FECHA_UPDATE"].ToDateTime(), 
              Activo = row.IsNull("FECHA_BAJA") ? true : false
          };
      }
      #endregion
    }
}
